package writtenTraining.day46;

import java.util.*;

/**
 * day46(1)：贪心 + 数学：AOE还是单体？
 */

public class Main {
    public static void main(String[] args) {
//         贪心 + 数学
//         输入数据
        Scanner in =new Scanner(System.in);
        int n = in.nextInt(), k = in.nextInt();
        
        long sum = 0L;
        int[] nums = new int[n];
        for(int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
            sum += nums[i];
        }
        
        if(n < k) {
            System.out.println(sum);
        } else {
            // 排序
            Arrays.sort(nums);
            int tar = nums[n-k];
            long ret = tar * k;
            for(int i = n - k + 1; i < n; i++) {
                ret += (nums[i] - tar);
            }
            System.out.println(ret);
        }
        
        
        
    }
}


/**
 * day46(2):哈希 + 数学坐标：kotori和n皇后
 */



 class Main1 {
    public static void main(String[] args) {
//         哈希 + 数学坐标
//         输入数据
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
//         key 表示横坐标
        Set<Long> row = new HashSet<>();
        Set<Long> col = new HashSet<>();
        Set<Long> mer = new HashSet<>();
        Set<Long> sub = new HashSet<>();

        long INF = 0x3f3f3f3f3f3f3f3fL;
        long ret = INF;
        for(int i = 1; i <= n; i++) {
            long num1 = in.nextLong(), num2 = in.nextLong();

//             只要找到了能攻击就直接保存最开始加入的那个位置
            if(ret == INF && (row.contains(num1)
                    || col.contains(num2)
                    || mer.contains(num1+num2)
                    || sub.contains(num2-num1))) {
                ret = i;
            }

            row.add(num1);
            col.add(num2);
            mer.add(num1+num2);
            sub.add(num2-num1);
        }

        int k = in.nextInt();
        while(k-- > 0) {
            long t = in.nextLong();
            if(t >= ret) {
                System.out.println("Yes");
            } else {
                System.out.println("No");
            }
        }
    }
}


/**
 *  day46(3)：区间dp:NC393 取金币
 */



 class Solution2 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param coins int整型一维数组
     * @return int整型
     */
    public int getCoins (ArrayList<Integer> coins) {
        // 区间dp
        int n = coins.size();
//        前后增加一行
        coins.add(n , 1);
        coins.add(0, 1);
        // 创建dp
        int[][] dp = new int[n + 2][n + 2];

        // 初始化
        for (int i = n; i >= 1; i--) {
            for (int j = i ; j <= n ; j++) {
                for (int k = i ; k <= j ; k++) {
                    dp[i][j] = Math.max(dp[i][k - 1] + dp[k + 1][j]
                                    + coins.get(k) * coins.get(i - 1) * coins.get(j + 1),
                            dp[i][j]);
                }
            }
        }


        return dp[1][n];
    }
}